/*
struct TreeNode {
	int val;
	struct TreeNode *left;
	struct TreeNode *right;
	TreeNode(int x) :
			val(x), left(NULL), right(NULL) {
	}
};*/
/*
在A树找到与B树根节点相同的结点P
以P作为根节点和A树进行比较
 A有的，B可以没有
 B有的，A必须有
*/
class Solution {
public:
    bool ispart(TreeNode*r1,TreeNode *r2)
    {
        //B有的A没有
        if(r1==nullptr&&r2!=nullptr)
            return false;
        if(r2==nullptr)
            return true;
        return r1->val==r2->val&&ispart(r1->left, r2->left)&&ispart(r1->right, r2->right);
    }
    bool HasSubtree(TreeNode* r1, TreeNode* r2) {
        if(!r1||!r2)
            return false;
        if(r1->val==r2->val&&ispart(r1,r2));
            return true;
        return HasSubtree(r1->left, r2)||HasSubtree(r1->right,r2);
}
};